/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.lardocelar.core;

import java.net.UnknownHostException;

/**
 *
 * @author Leandro
 */
public class Mensagem {

    private Servidor servidor;
    private String funcionalidade;
    private String parametro;
    private String retorno;
    public static final String SEPARADOR = "#";
    public static final String SEPARADOR_PARAMETROS = "&";

    public Mensagem()
    {
    
    }
            
    private Mensagem(Servidor serv, String func, String par, String ret) {
        servidor = serv;
        funcionalidade = func;
        parametro = par;
        retorno = ret;
    }

    public String gerarMensagem() throws MensagemInvalida {
        if(getServidor() == null) throw new MensagemInvalida("Servidor não encontrado");
        if(getServidor().getIpAddress() == null) throw new MensagemInvalida("Ip do Servidor não informado");
        if(getServidor().getPorta() == 0) throw new MensagemInvalida("Porta de comunicação com o Servidor não informado");
        if("".equals(getFuncionalidade())) throw new MensagemInvalida("Funcionalidade não informada");
        
        return IpUtil.parseIpaddressToString(getServidor().getIpAddress()) + SEPARADOR + getServidor().getPorta() + SEPARADOR + getFuncionalidade() + SEPARADOR + getParametro();
    }

    public static Mensagem tranformarMensagem(String mensagem) throws UnknownHostException, MensagemInvalida {
        String[] mensagemQuebrada = mensagem.split(SEPARADOR);
        if(mensagemQuebrada.length == 5 )
        {
            byte[] ip = IpUtil.parseStringToBytes(mensagemQuebrada[0]);
            int port = Integer.parseInt(mensagemQuebrada[1]);
            Servidor serv = Servidor.Carregar(ip, port);
            return new Mensagem(serv, mensagemQuebrada[2], mensagemQuebrada[3], mensagemQuebrada[4]);
        }
        else
            throw new MensagemInvalida();
    }

    /**
     * @return the servidor
     */
    public Servidor getServidor() {
        return servidor;
    }

    /**
     * @param servidor the servidor to set
     */
    public void setServidor(Servidor servidor) {
        this.servidor = servidor;
    }

    /**
     * @return the funcionalidade
     */
    public String getFuncionalidade() {
        return funcionalidade;
    }

    /**
     * @param funcionalidade the funcionalidade to set
     */
    public void setFuncionalidade(String funcionalidade) {
        this.funcionalidade = funcionalidade;
    }

    /**
     * @return the parametro
     */
    public String getParametro() {
        return parametro;
    }

    /**
     * @param parametro the parametro to set
     */
    public void setParametro(String parametro) {
        this.parametro = parametro;
    }

    /**
     * @return the retorno
     */
    public String getRetorno() {
        return retorno;
    }

    /**
     * @param retorno the retorno to set
     */
    public void setRetorno(String retorno) {
        this.retorno = retorno;
    }
}
